package sys

import (
	"ginweb-admin/commons/base/service"
	"ginweb-admin/global"
	"ginweb-admin/model/entity/sys"
)

type SysRoleMenuService struct {
	service.BaseService[uint, sys.SysRoleMenu]
}

// 保存角色对应的菜单信息
func (service *SysRoleMenuService) SaveRoleMenus(roleId uint, sysRoleMenus []*sys.SysRoleMenu) (err error) {
	// 开启事务
	db := global.DB.Begin()

	// 删除角色对应的菜单
	if err := db.Where("role_id = ?", roleId).Delete(&sys.SysRoleMenu{}).Error; err != nil {
		// 事务回滚
		db.Rollback()
		return err
	}
	// 保存角色和菜单的关系
	if err := db.Create(sysRoleMenus).Error; err != nil {
		// 事务回滚
		db.Rollback()
		return err
	}
	// 事务提交
	return db.Commit().Error
}

// 查询角色对应的菜单信息
func (service *SysRoleMenuService) SelectRoleMenus(roleId uint) (sysMenus []*sys.SysMenu, err error) {
	err = global.DB.Select("t2.*").Table("sys_role_menu t1,sys_menu t2").
		Where("t1.menu_id = t2.id and  t2.hidden = 0 and t2.is_deleted = 0 and t1.role_id = ?", roleId).Scan(&sysMenus).Error
	return sysMenus, err
}
